商类型将某一类型的命题等价关系变粗,使得由某个等价关系关联的项被视为相等。该等价关系由Setoid的一个实例给出。
从集合论的角度来看,Quotient s可以被看作是α在Setoid实例的关系s.r下的等价类的集合。
来自Quotient s的函数必须证明它们满足s.r:
-
定义一个函数
f : Quotient s → β, -
提供
f' : α → β -
并证明对于所有
x : α和y : α,有s.r x y → f' x = f' y。Quotient.lift实现了这个操作。
主要的商操作符包括:
-
Quotient.mk将底层类型α的元素放入商类型中。 -
Quotient.lift允许从商类型定义到另一个类型的函数。 -
Quotient.sound断言由r关联的元素相等。 -
Quotient.ind用于在证明商类型时假设所有元素都是通过Quotient.mk构造的。
Quotient构建在原始商类型Quot之上,后者不需要关系是等价关系的证明。对于确实为等价关系的场景,应使用Quotient而非Quot。